﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Timers;

namespace KATAJAVI_SIA
{
    public partial class AgregarAtencion : Form
    {
        KATAJAVI call = new KATAJAVI();
        DateTime fecha = new DateTime();
        DataClassesDataContext BEDE = new DataClassesDataContext();
        IEnumerable<MOTO> lista1;
        IEnumerable<ATENCION> lista2;
        IEnumerable<CLIENTE> lista3;
        int valpat, valmoto, valmec, valpass, valdesc;
        
        
        public AgregarAtencion()
        {
            InitializeComponent();
        }

        private void AgregarAtencion_Load(object sender, EventArgs e)
        {
            cbx_AtencionMecanico.DataSource = BEDE.MECANICO.OrderBy(a => a.Nombre).Where(a => a.rut_mecanico != 17461175);
            cbx_AtencionMecanico.ValueMember = "rut_mecanico";
            cbx_AtencionMecanico.DisplayMember = "Nombre";
            cbx_AtencionMecanico.SelectedIndex = -1;
            int aa = cbx_AtencionMecanico.Items.Count;
            if (aa == 0)
            {
                tbx_AtencionFechaIngreso.Enabled = false;
                tbx_AtencionPatente.Enabled = false;
                tbx_AtencionClienteNombre.Enabled = false;
                tbx_AtencionRutDueno.Enabled = false;
                cbx_AtencionMecanico.Enabled = false;
                tbx_AtencionMecanicoClave.Enabled = false;
                tbx_AtencionClienteNombre.Enabled = false;
                btn_AtencionGuardar.Enabled = false;
                btn_AtencionLimpiar.Enabled = false;
                tbx_AtencionDescripcion.Enabled = false;
                MessageBox.Show("El sistema no puede comensar a registrar atenciones mientras no se registre algun mecánico. Por favor ingrese al panel de administradores y registre un nuevo mecánico antes de registrar una atención.", "ERROR AL INICIAR ATENCIONES", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            fecha = DateTime.Now;
            tbx_AtencionFechaIngreso.Text = fecha.Day + "/" + fecha.Month + "/" + fecha.Year;
            tbx_AtencionMecanicoClave.PasswordChar = '•';
            
            
        }

        private void Limpiar()
        {
            tbx_AtencionClienteNombre.Clear();
            tbx_AtencionRutDueno.Clear();
            tbx_AtencionDescripcion.Clear();
            tbx_AtencionPatente.Clear();
            tbx_AtencionMecanicoClave.Clear();
            cbx_AtencionMecanico.SelectedIndex = -1;
            errorProvider1.Clear();
        }
        private void btn_ClienteLimpiar_Click(object sender, EventArgs e)
        {
            Limpiar();
        }


        private void btn_AtencionGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                tbx_AtencionPatente.Focus();
                tbx_AtencionClienteNombre.Focus();
                tbx_AtencionRutDueno.Focus();
                cbx_AtencionMecanico.Focus();
                tbx_AtencionMecanicoClave.Focus();
                tbx_AtencionDescripcion.Focus();
                btn_AtencionGuardar.Focus();

                int sw = valpat * valmec * valdesc * valpass;
                if (sw == 0)
                {
                    MessageBox.Show("Los datos ingresados son erroneos, por favor revise los campos señalados", "ERROR EN LOS DATOS INGRESADOS.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                if (sw == 1)
                {
                    int codatencion = call.GenIDAtencion();
                    int valatencion = call.ComprobarAtencion(tbx_AtencionPatente.Text);
                    if (valatencion == 1)   // LA MOTOCICLETA YA ESTA SIENDO ATENDIDA.
                    {
                        MessageBox.Show("La MOTOCICLETA que desea ingresar a atención, ya tiene una ATENCIÓN PENDIENTE.\n(No se pueden llevar dos atenciones paralelas a una misma motocicleta). Si lo desea, puede acceder a editar la atención ya existente.", "ERROR AL GUARDAR ATENCION.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Limpiar();
                    }
                    if (valatencion == 0)   // LA MOTO NO TIENE ATENCIONES, O TODAS SUS ATENCIONES YA ESTAN TERMINADAS.
                    {
                        if (valmoto == 1)
                        {
                            int t = 0;
                            lista2 = BEDE.ATENCION;
                            foreach (ATENCION aux in lista2)
                            {
                                if (aux.id_motocicleta == call.GenIDMoto(tbx_AtencionPatente.Text)) // existe alguna atencion de la motocicleta
                                {
                                    if (aux.estado_atencion != 4)   // si la atencion de la moto aun esta pendiente
                                    {
                                        t++;
                                    }
                                }
                            }
                            if (t == 0)
                            {
                                try
                                {
                                    ATENCION atent = new ATENCION();
                                    atent.fecha_ingreso = fecha;
                                    atent.cod_atencion = codatencion;
                                    atent.id_motocicleta = call.GenIDMoto(tbx_AtencionPatente.Text);
                                    atent.rut_cliente = int.Parse(tbx_AtencionRutDueno.Text);
                                    atent.rut_mecanico = int.Parse(cbx_AtencionMecanico.SelectedValue.ToString());
                                    atent.descripcion_ingreso = tbx_AtencionDescripcion.Text;
                                    atent.estado_atencion = 0;
                                    atent.softdelete = 1;
                                    BEDE.ATENCION.InsertOnSubmit(atent);
                                    BEDE.SubmitChanges();
                                    MessageBox.Show("La informacion ingresada fue almacenada\nexitosamente en la base de datos.", "INFORMACIÓN GUARDADA.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    Limpiar();
                                }
                                catch { }
                            }
                            else
                            {
                                MessageBox.Show("La MOTOCICLETA que desea ingresar a atención, ya tiene una ATENCIÓN PENDIENTE.\n(No se pueden llevar dos atenciones paralelas a una misma motocicleta). Si lo desea, puede acceder a editar la atención ya existente.", "ERROR AL GUARDAR ATENCION.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                Limpiar();
                            }
                        }
                    }
                }
            }catch { MessageBox.Show("Ha ocurrido un error al intentar guardar la inforación\n del cliente. Por favor, revise los datos e intentelo nuevamente.\n De Persistir el error, se recomienda reiniciar el programa.","ERROR AL INTENTAR GUARDAR.", MessageBoxButtons.OK, MessageBoxIcon.Error); }
            tbx_AtencionMecanicoClave.Clear();
        }

        private void tbx_AtencionMecanicoClave_TextChanged(object sender, EventArgs e)
        {
            tbx_AtencionMecanicoClave.Text = tbx_AtencionMecanicoClave.Text.Trim();
        }

        private void tbx_AtencionRutDueno_TextChanged(object sender, EventArgs e)
        {
            tbx_AtencionRutDueno.Text = tbx_AtencionRutDueno.Text.Trim();
        }

        private void tbx_AtencionPatente_TextChanged(object sender, EventArgs e)
        {
            tbx_AtencionPatente.Text = tbx_AtencionPatente.Text.Trim();
        }

        private void tbx_AtencionPatente_Leave(object sender, EventArgs e)
        {
            if (tbx_AtencionPatente.Text == "")
            {
                tbx_AtencionRutDueno.Clear();
                tbx_AtencionClienteNombre.Clear();
                errorProvider1.SetError(tbx_AtencionRutDueno, "");
                errorProvider1.SetError(tbx_AtencionClienteNombre, "");
                valpat = 0;
            }
            valpat = call.ValidarPatente(tbx_AtencionPatente.Text.ToString());
            if (valpat == 0)
            { errorProvider1.SetError(tbx_AtencionPatente, "* La patente ingresada es erronea.\n* Este campo no puede quedar vacío."); }
            else 
            {
                valmoto = call.ComprobarMoto(tbx_AtencionPatente.Text);
                if (valmoto == 0) { errorProvider1.SetError(tbx_AtencionPatente, "* No existe ninguna motocicleta registrada con esta patente.\n(Por favor proceda a registrar la motocicleta antes de iniciar su atención)."); }
                else
                {
                    errorProvider1.SetError(tbx_AtencionPatente, "");
                    lista1 = BEDE.MOTO;
                    foreach (MOTO aux in lista1)
                    {
                        int ide = call.GenIDMoto(tbx_AtencionPatente.Text);
                        if (aux.id_motocicleta == ide)
                        {
                            tbx_AtencionRutDueno.Clear();
                            tbx_AtencionRutDueno.Text = aux.rut_cliente.ToString();
                            lista3 = BEDE.CLIENTE;
                            foreach (CLIENTE aux2 in lista3)
                            {
                                if(aux2.rut_cliente == int.Parse(tbx_AtencionRutDueno.Text.ToString()))
                                {
                                    tbx_AtencionClienteNombre.Clear();
                                    tbx_AtencionClienteNombre.Text = aux2.nombre;
                                }
                            }
                        }
                    }
                }
            }
        }

        private void tbx_AtencionMecanicoClave_Leave(object sender, EventArgs e)
        {
            if (tbx_AtencionMecanicoClave.Text == "")
            {
                valpass = 0;
                errorProvider1.SetError(tbx_AtencionMecanicoClave, "Este campo no puede quedar vacío.");
            }
            else
            {
                valpass = call.ValidarClaveMecanico(int.Parse(cbx_AtencionMecanico.SelectedValue.ToString()), int.Parse(tbx_AtencionMecanicoClave.Text));
                if (valpass == 0) { errorProvider1.SetError(tbx_AtencionMecanicoClave, "La clave ingresada no corresponde al\nmecanico seleccionado."); }
                else { errorProvider1.SetError(tbx_AtencionMecanicoClave, ""); }
            }
        }

        private void cbx_AtencionMecanico_Leave(object sender, EventArgs e)
        {
            valmec = call.ValidarCombobox(cbx_AtencionMecanico.Text);
            if (valmec == 0) { errorProvider1.SetError(cbx_AtencionMecanico, "Debe seleccionar un mecanico para esta atención."); }
            else { errorProvider1.SetError(cbx_AtencionMecanico, ""); }
        }

        private void tbx_AtencionDescripcion_Leave(object sender, EventArgs e)
        {
            tbx_AtencionDescripcion.Text = tbx_AtencionDescripcion.Text.Trim();
            if (tbx_AtencionDescripcion.Text == "") { valdesc = 0; } else { valdesc = 1; }
            if (valdesc == 0) { errorProvider1.SetError(tbx_AtencionDescripcion, "Este campo no puede quedar vacío.\n(Ingrese datos acerca del motivo\nde ingreso de la motocicleta)."); }
            else { errorProvider1.SetError(tbx_AtencionDescripcion, ""); }
        }

        private void tbx_AtencionClienteNombre_Leave(object sender, EventArgs e)
        {
            if (tbx_AtencionClienteNombre.Text == "") { errorProvider1.SetError(tbx_AtencionClienteNombre, "No se ha asociado ningun cliente a esta atención."); }
            else { errorProvider1.SetError(tbx_AtencionClienteNombre, ""); }
        }

        private void tbx_AtencionRutDueno_Leave(object sender, EventArgs e)
        {
            if (tbx_AtencionRutDueno.Text == "") { errorProvider1.SetError(tbx_AtencionRutDueno, "No se ha asociado ningun cliente a esta atención."); }
            else { errorProvider1.SetError(tbx_AtencionRutDueno, ""); }
        }
    }
}




